package com.qfedu.openplateform.user.controller;

import com.qfedu.openplateform.cache.service.CacheService;
import com.qfedu.openplateform.common.entity.ResponseData;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.time.Instant;
import java.util.Date;

@RestController
public class UserController {

    @Autowired
    private CacheService cacheService;

    /**
     * 第三方开发者（客户） 登录
     *
     * 动作：
     *    1.匹配用户名  密码
     *    2.生成token 并返回
     *    3.将该用户对应的 token 存到  redis
     *
     *
     * @param username
     * @param password
     * @return
     */
    @RequestMapping("/login")
    public ResponseData<String> login(String username, String password, HttpServletResponse response) throws Exception {


        // 1.校验用户名密码   用户密码 在plate_data.customer  表中,而应用对应库 plate_api_db
        // 所以我们暂时写死，等微服务化之后可以通过 远程调用 获取到对应 用户密码
        ResponseData<String> responseData = new ResponseData();

        if ("admin".equals(username)&& "admin".equals(password)){
            // 如果成功 ，返回 token


            Instant now = Instant.now();
            String jwt = Jwts.builder()

                    .setSubject(username)//设置当前的用户是谁,当然任何信息都可以随便写,只不过你后续拿到之后不知道怎么处理而已
                    .setIssuedAt(Date.from(now))//设置开始的有效期
                    .setExpiration(Date.from(now.plusSeconds(3600)))//设置过期时间我当前时间顺眼一小时
                    // 自定义的参数
                    .claim("id", 1)//可以随便内容,主要是键值对,可以在需要的地方拿出来
                    //  meiyoumima  盐
                    .signWith(SignatureAlgorithm.HS256,"meiyoumima".getBytes())//设置签名的算法和秘钥值
                    .compact();
            System.err.println(jwt);


            // 如何返回给前端token
            response.addHeader("token", jwt);

            // 需要将 token 存入redis
             cacheService.save2Redis("token-"+username,jwt,3600*1000);

            responseData.setCode("0");
            responseData.setMessage("seuccess");
            responseData.setData("登录成功");

            return responseData;
        }


        responseData.setCode("1");
        responseData.setMessage("error");
        responseData.setData("登录失败");

        return responseData;
    }


}
